﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClienteWinMGI.Logica;
using ComunesMGI.DataTypes;


namespace ClienteWinMGI.Presentacion
{
    public partial class AsignarResponsableATarea : Form
    {
        private LogicaFactory _fabrica;
        private DataCliente _datosCliente;
        private DataSistema _datosSistema;
        private DataIncidente _datosIncidente;
        private DataTarea _datosTarea;
        private DataUsuario _datosUsuario;

        public AsignarResponsableATarea()
        {
            InitializeComponent();

            //obtengo los datos de los clientes para agregarlos al combo de clientes
            _fabrica = LogicaFactory.getInstance();
            IClientes clientes = _fabrica.getIClientes();
            List<DataCliente> listaClientes = clientes.getClientes();

            for (int i = 0; i < listaClientes.Count(); i++)
            {
                cboCliente.Items.Add(listaClientes[i].Nombre);
            }

            cboSistema.SelectedIndex = -1;
            






        }

        private void cboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboCliente.SelectedIndex != -1)
            {
                string nombreCliente = cboCliente.SelectedItem.ToString();
                _datosCliente = new DataCliente(nombreCliente);
                cboSistema.SelectedIndex = -1;
                
                
                cboIncidente.SelectedIndex = -1;
                cboUsuario.SelectedIndex = -1;
                lstTarea.SelectedIndex = -1;
                cboSistema.Items.Clear();
                cboIncidente.Items.Clear();
                cboUsuario.Items.Clear();
                lstTarea.Items.Clear();
               
                ISistemas sist = this._fabrica.getISistemas();
                List<DataSistema> lista = sist.getSistemas(new DataCliente(nombreCliente));
                for (int i = 0; i < lista.Count(); i++)
                {
                    DataSistema dataSist = lista[i];
                    string item = " Nombre=" + dataSist.Nombre + ";"+   "Sitio=" + dataSist.Sitio;
                    cboSistema.Items.Add(item);
                }
                cboSistema.SelectedIndex = -1;
                lblSistema.Visible = true;
                cboSistema.Visible = true;
                lblIncidente.Visible = false;
                cboIncidente.Visible = false;
                lblUsuario.Visible = false;
                cboUsuario.Visible = false;
                lblTareas.Visible = false;
                lstTarea.Visible = false;
                btnAsignar.Visible = false;
               
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void btnAsignar_Click(object sender, EventArgs e)
        {
            IIncidentes iincidentes = this._fabrica.getIIncidentes();
            bool isResponsable = iincidentes.asignarResposable(_datosSistema, this._datosIncidente, this._datosTarea, this._datosUsuario);
            if (isResponsable)
            {
                Notificacion notificacion = new Notificacion("Asignacion exitosa", "La asignación fue exitosa", "Se ha asignado correctamente la tarea con identificador " + this._datosTarea.IdTarea + " al usuario " + this._datosUsuario.Nombre+ ".");
                notificacion.ShowDialog();
                cboUsuario.SelectedIndex = -1;
                btnAsignar.Visible = false;
       

            }
            else 
            {
                Error error = new Error("Error", "No se pudo llevar a cabo la asignacion", "No se pudo asignar la tarea con identificador " + this._datosTarea.IdTarea + " a al usuario " + this._datosUsuario.Nombre + ".");
                error.ShowDialog();
            }
            cboUsuario.SelectedItem = -1;
            
           
        }

        private void cboSistema_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboSistema.SelectedIndex != -1)
            {
                string datoSistema = cboSistema.SelectedItem.ToString();
                char[] delimitador = { '=' , ';'};
                
                string[] palabras = datoSistema.Split(delimitador);
                
                string nombre = palabras[1];
                
                string sitio = palabras[3];
               
                cboIncidente.SelectedIndex = -1;
                lstTarea.SelectedIndex = -1;
                cboUsuario.SelectedIndex = -1;
                cboIncidente.Items.Clear();
                lstTarea.Items.Clear();
                cboUsuario.Items.Clear();
                
                _datosSistema = new DataSistema(nombre, sitio);
               
                
                IIncidentes incidentes = this._fabrica.getIIncidentes();
                List<DataIncidente> listaIncidentes = incidentes.getIncidentes(this._datosCliente, this._datosSistema);

                for (int i = 0; i < listaIncidentes.Count(); i++)
                {
                    string inc = "Id=" + listaIncidentes[i].IdIncidente +";"+ "Desc=" + listaIncidentes[i].Descripcion;
                    cboIncidente.Items.Add(inc);
                }
                cboIncidente.SelectedIndex = -1;

                cboIncidente.Visible = true;
                lblIncidente.Visible = true;
                lstTarea.Visible = false;
                lblTareas.Visible = false;
                cboUsuario.Visible = false;
                lblUsuario.Visible = false;
                btnAsignar.Visible = false;

            }
        }

        private void cboIncidente_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboIncidente.SelectedIndex != -1)
            {
                string datoIncidente = cboIncidente.SelectedItem.ToString();
                char[] delimitador = { '=', ';' };
                string[] palabras = datoIncidente.Split(delimitador);
                string id = palabras[1];
                string desc = palabras[3];
                _datosIncidente = new DataIncidente(id, desc);

                lstTarea.SelectedIndex = -1;
                cboUsuario.SelectedIndex = -1;
                lstTarea.Items.Clear();
                cboUsuario.Items.Clear();
                IIncidentes interfazIncidentes = this._fabrica.getIIncidentes();
                List<DataTarea> listaTareas = interfazIncidentes.getTareas(this._datosCliente, this._datosSistema, _datosIncidente);
                for (int i = 0; i < listaTareas.Count(); i++)
                {
                    string itemTareas= "Id="+listaTareas[i].IdTarea+";"+ " Desc="+ listaTareas[i].Descripcion;
                    lstTarea.Items.Add(itemTareas);
                }
                lstTarea.SelectedIndex = -1;

                lstTarea.Visible = true;
                lblTareas.Visible = true;
                cboUsuario.Visible = false;
                lblUsuario.Visible = false;
                btnAsignar.Visible = false;

            }

        }

        private void lstTarea_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lstTarea.SelectedIndex != -1) 
            {
                string datosTareas=lstTarea.SelectedItem.ToString();
                char[] delimitador = { '=' ,';'};
                string[] palabras = datosTareas.Split(delimitador);
                string idTarea = palabras[1];
                string descTarea = palabras[3];
                _datosTarea = new DataTarea(idTarea, descTarea);
                cboUsuario.SelectedIndex = -1;
                cboUsuario.Items.Clear();
                IUsuarios iu = this._fabrica.getIUsuarios();
                List<DataUsuario> listaUsuarios = iu.getUsuarios();
                for (int i = 0; i < listaUsuarios.Count(); i++)
                {
                    string nombreUsuario = listaUsuarios[i].Nombre;
                    cboUsuario.Items.Add(nombreUsuario);
                }
                cboUsuario.SelectedIndex = -1;
                cboUsuario.Visible = true;
                lblUsuario.Visible = true;
                btnAsignar.Visible = false;
            }

        }

        private void cboUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboUsuario.SelectedIndex != -1) 
            {
                string user = cboUsuario.SelectedItem.ToString();
                _datosUsuario = new DataUsuario(user);
                btnAsignar.Visible = true;
                
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void AsignarResponsableATarea_Load(object sender, EventArgs e)
        {

        }

        private void lblIncidente_Click(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }
    }
}
